﻿namespace Sofire.Data
{
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Text;

    #region Enumerations

    /// <summary>
    /// 一个表示实体操作的类型。
    /// </summary>
    public enum EntityOperation
    {
        /// <summary>
        /// 表示正在更新实体。
        /// </summary>
        Update = 0,
        /// <summary>
        /// 表示正在新增实体。
        /// </summary>
        Insert = 1,
        /// <summary>
        /// 表示正在删除实体。
        /// </summary>
        Delete = 2,
        /// <summary>
        /// 表示正在将数据行重新映射到实体。
        /// </summary>
        RefreshEntity = 3,
        /// <summary>
        /// 表示正在将实体重新映射到数据行。
        /// </summary>
        RefreshRow = 4,
        /// <summary>
        /// 表示实体正在清空。
        /// </summary>
        Clear = 5,
    }

    #endregion Enumerations

    #region Delegates

    /// <summary>
    /// 表示包含实体操作类型与操作受影响的行的事件委托。
    /// </summary>
    /// <param name="sender">事件源。</param>
    /// <param name="e">事件参数。</param>
    public delegate void EntityChangedEventHandler(object sender, EntityChangedEventArgs e);

    #endregion Delegates

    /// <summary>
    /// 表示包含实体操作类型与操作受影响的行的事件参数。
    /// </summary>
    public class EntityChangedEventArgs : EventArgs
    {
        #region Fields

        private EntityOperation _Operation;
        private DataRow _Row;

        #endregion Fields

        #region Constructors

        /// <summary>
        /// 初始化 <see cref="Sofire.Data.EntityChangedEventArgs"/> 类的新实例。
        /// </summary>
        /// <param name="operation">实体操作的类型。</param>
        /// <param name="row">操作受影响的行。</param>
        public EntityChangedEventArgs(EntityOperation operation, DataRow row)
        {
            this._Operation = operation;
            this._Row = row;
        }

        #endregion Constructors

        #region Properties

        /// <summary>
        /// 获取一个值，表示实体操作的类型。
        /// </summary>
        public EntityOperation Operation
        {
            get
            {
                return this._Operation;
            }
        }

        /// <summary>
        /// 获取一个值，表示实体操作受影响的行。
        /// </summary>
        public DataRow Row
        {
            get
            {
                return this._Row;
            }
        }

        #endregion Properties
    }
}